%config Completer.use_jedi = False #for autocompletion feature

import pandas as pd
import numpy as np
import yfinance as yf
import datetime

%matplotlib inline

from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
import plotly
import plotly.io as pio
pio.templates.default = "none"

from io import BytesIO
from zipfile import ZipFile
import pandas
import requests
url = 'https://www.bis.org/statistics/full_cbpol_d_csv_row.zip'
filename = requests.get(url).content
zf = ZipFile( BytesIO(filename), 'r' )
zf.namelist()
['WS_CBPOL_D_csv_row.csv']
match = [s for s in zf.namelist() if "WS_CBPOL_D_csv_row" in s][0]

df = pd.read_csv( zf.open(match) ,skiprows=lambda x: x in [0, 2])
df = df.set_index('Reference area')
df = df.iloc[7:]
df = df.astype(float)
df.fillna(method='ffill')
C:\Users\Allan\anaconda3\envs\pradoML\lib\site-packages\IPython\core\interactiveshell.py:3063: DtypeWarning:

Columns (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38) have mixed types.Specify dtype option on import or set low_memory=False.

AR:Argentina AU:Australia BR:Brazil CA:Canada CH:Switzerland CL:Chile CN:China CO:Colombia CZ:Czech Republic DK:Denmark ... RO:Romania RS:Serbia RU:Russia SA:Saudi Arabia SE:Sweden TH:Thailand TR:Turkey US:United States XM:Euro area ZA:South Africa
Reference area
1946-01-02 NaN NaN NaN NaN 1.50 NaN NaN NaN NaN 4.0 ... NaN NaN NaN NaN 2.50 NaN NaN NaN NaN NaN
1946-01-03 NaN NaN NaN NaN 1.50 NaN NaN NaN NaN 4.0 ... NaN NaN NaN NaN 2.50 NaN NaN NaN NaN NaN
1946-01-04 NaN NaN NaN NaN 1.50 NaN NaN NaN NaN 4.0 ... NaN NaN NaN NaN 2.50 NaN NaN NaN NaN NaN
1946-01-05 NaN NaN NaN NaN 1.50 NaN NaN NaN NaN 4.0 ... NaN NaN NaN NaN 2.50 NaN NaN NaN NaN NaN
1946-01-06 NaN NaN NaN NaN 1.50 NaN NaN NaN NaN 4.0 ... NaN NaN NaN NaN 2.50 NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2022-06-16 49.0 0.85 13.25 1.5 -0.75 9.0 3.7 6.0 5.75 -0.6 ... 3.75 2.5 9.5 1.75 0.25 0.5 14.0 1.625 0.0 4.75
2022-06-17 49.0 0.85 13.25 1.5 -0.25 9.0 3.7 6.0 5.75 -0.6 ... 3.75 2.5 9.5 1.75 0.25 0.5 14.0 1.625 0.0 4.75
2022-06-18 49.0 0.85 13.25 1.5 -0.25 9.0 3.7 6.0 5.75 -0.6 ... 3.75 2.5 9.5 1.75 0.25 0.5 14.0 1.625 0.0 4.75
2022-06-19 49.0 0.85 13.25 1.5 -0.25 9.0 3.7 6.0 5.75 -0.6 ... 3.75 2.5 9.5 1.75 0.25 0.5 14.0 1.625 0.0 4.75
2022-06-20 49.0 0.85 13.25 1.5 -0.25 9.0 3.7 6.0 5.75 -0.6 ... 3.75 2.5 9.5 1.75 0.25 0.5 14.0 1.625 0.0 4.75

27929 rows × 38 columns

for i,country in enumerate(df.columns):
    fig = go.Figure()
       
    fig.add_trace(go.Scatter(
        x=df[country].dropna().index,
        y=df[country].dropna().values/100,
        name=country,
        mode="lines"))
    
   
    fig.update_layout(title={'text': country}, height=400, width=900)
    fig.layout.yaxis1.tickformat = ',.1%' 
    fig.update_xaxes(showgrid=False)
    fig.update_yaxes(showgrid=False)
    fig.show()